package g

/*
 * @lc app=leetcode.cn id=35 lang=golang
 *
 * [35] 搜索插入位置
 给定一个排序数组和一个目标值，在数组中找到目标值，并返回其索引。如果目标值不存在于数组中，返回它将会被按顺序插入的位置。
 你可以假设数组中无重复元素。
*/

// @lc code=start
func searchInsert(nums []int, target int) int {
	return searchInsertBinary(nums, target)
}

func searchInsert1(nums []int, target int) int {
	for i := 0; i < len(nums); i++ {
		if target <= nums[i] {
			return i
		}
	}
	return len(nums)
}

func searchInsertBinary(nums []int, target int) int {
	var left int
	right := len(nums) - 1
	ret := len(nums)
	for left <= right {
		mid := ((right - left) >> 1) + left
		if target <= nums[mid] {
			ret = mid
			right = mid - 1
		} else {
			left = mid + 1
		}
	}

	return ret
}

// @lc code=end
